<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="oH5TC" id="oH5TC"><span data-lake-id="uee990666" id="uee990666">典型回答</span></h1>
  <p data-lake-id="ua2f1e52e" id="ua2f1e52e"><br></p>
  <p data-lake-id="u4ac8ed6b" id="u4ac8ed6b"><span data-lake-id="ucf319e1f" id="ucf319e1f">Canal是阿里巴巴开源的数据同步工具，他是一个用于数据库的数据变更捕获，它可以捕获数据库中的变更操作（如插入、更新、删除），并将这些变更以实时流的方式发布给其他系统进行消费。主要应用场景之一是数据库的增量数据同步，通常在数据仓库、缓存、搜索引擎等系统中使用。</span></p>
  <p data-lake-id="u07ac01f5" id="u07ac01f5"><span data-lake-id="u5f12adaa" id="u5f12adaa">​</span><br></p>
  <p data-lake-id="u01bdd82e" id="u01bdd82e"><span data-lake-id="u13804207" id="u13804207">我们经常会在数据迁移、数据同步的场景中需要用到canal，比如分库分表时买家表同步出一张卖家表来，比如我们要把mysql中的数据同步到es中等等，这些场景，canal都能大显神威。</span></p>
  <p data-lake-id="u38dcd1b8" id="u38dcd1b8"><span data-lake-id="u1c96193d" id="u1c96193d">​</span><br></p>
  <p data-lake-id="u1ad9ba71" id="u1ad9ba71"><span data-lake-id="u138104bc" id="u138104bc">Canal的实现原理其实挺简单的：</span></p>
  <p data-lake-id="ubbfad566" id="ubbfad566"><span data-lake-id="ue91b9814" id="ue91b9814" class="lake-fontsize-12" style="color: rgb(31, 35, 40)">​</span><br></p>
  <p data-lake-id="ueefd1054" id="ueefd1054"><strong><span data-lake-id="u0de5e77a" id="u0de5e77a" class="lake-fontsize-12" style="color: rgb(31, 35, 40)">Canal会模拟 MySQL slave 的交互协议，把自己伪装成为一个 MySQL slave ，向 MySQL master 发送dump 协议，MySQL master 收到 dump 请求后，会开始向这个伪装的slavee ( canal )推送 binlog ，canal 把 binlog 解析成流，然后对接到各个后续的消费者中，如ES、数据库等。</span></strong></p>
  <p data-lake-id="u991a8d6b" id="u991a8d6b"><span data-lake-id="ufbace2b2" id="ufbace2b2" class="lake-fontsize-12" style="color: rgb(31, 35, 40)">​</span><br></p>
  <p data-lake-id="uc83ad1c5" id="uc83ad1c5"><span data-lake-id="u7c1e2324" id="u7c1e2324" class="lake-fontsize-12" style="color: rgb(31, 35, 40)">MySQL主从复制占坑：</span></p>
  <p data-lake-id="u8b4f8947" id="u8b4f8947"><span data-lake-id="u14105cdb" id="u14105cdb" class="lake-fontsize-12" style="color: rgb(31, 35, 40)">​</span><br></p>
 </body>
</html>